* Author: Colin Walters <walters@verbum.org>
*/
+/* for mkdtemp */
+#define _GNU_SOURCE
+
#include "config.h"
#include "ostree.h"
#include "otutil.h"
#include <sys/types.h>
+#include <stdio.h>
+#include <stdlib.h>
#include <attr/xattr.h>
#define ALIGN_VALUE(this, boundary) \
return ret;
}
+gboolean
+ostree_create_temp_dir (GFile *dir,
+ const char *prefix,
+ const char *suffix,
+ GFile **out_file,
+ GCancellable *cancellable,
+ GError **error)
+{
+ gboolean ret = FALSE;
+ ot_lfree char *template = NULL;
+ ot_lobj GFile *ret_file = NULL;
+
+ if (dir == NULL)
+ dir = g_file_new_for_path (g_get_tmp_dir ());
+
+ template = g_strdup_printf ("%s/%s-XXXXXX-%s",
+ ot_gfile_get_path_cached (dir),
+ prefix ? prefix : "tmp",
+ suffix ? suffix : "tmp");
+
+ if (mkdtemp (template) == NULL)
+ {
+ ot_util_set_error_from_errno (error, errno);
+ goto out;
+ }
+
+ ret_file = g_file_new_for_path (template);
+
+ ret = TRUE;
+ ot_transfer_out_value (out_file, &ret_file);
+ out:
+ return ret;
+}
+
gboolean
ostree_read_pack_entry_raw (guchar *pack_data,
guint64 pack_len,
#include "config.h"
#include "ot-admin-builtins.h"
-#include "otutil.h"
+#include "ostree.h"
#include <glib/gi18n.h>
#include <sys/utsname.h>
if (!g_file_query_exists (initramfs_file, NULL))
{
ot_lptrarray GPtrArray *mkinitramfs_args = NULL;
- ot_lfree char *tmpdir = NULL;
+ ot_lobj GFile *tmpdir = NULL;
ot_lfree char *initramfs_tmp_path = NULL;
ot_lobj GFile *initramfs_tmp_file = NULL;
ot_lobj GFileInfo *initramfs_tmp_info = NULL;
- if ((tmpdir = g_dir_make_tmp ("ostree-initramfs.XXXXXX", error)) == NULL)
+
+ if (!ostree_create_temp_dir (NULL, "ostree-initramfs", NULL, &tmpdir,
+ cancellable, error))
goto out;
last_deploy_path = g_build_filename ("/ostree", last_deploy_target, NULL);
"--mount-proc", "/proc",
"--mount-bind", "/dev", "/dev",
"--mount-bind", "/ostree/var", "/var",
- "--mount-bind", tmpdir, "/tmp",
+ "--mount-bind", ot_gfile_get_path_cached (tmpdir), "/tmp",
"--mount-bind", "/ostree/modules", "/lib/modules",
last_deploy_path,
"dracut", "-f", "/tmp/initramfs-ostree.img", release,
if (!ot_spawn_sync_checked (NULL, (char**)mkinitramfs_args->pdata, NULL,
G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, NULL, error))
- {
- (void) unlink (initramfs_tmp_path);
- goto out;
- }
+ goto out;
- initramfs_tmp_path = g_build_filename (tmpdir, "initramfs-ostree.img", NULL);
- initramfs_tmp_file = g_file_new_for_path (initramfs_tmp_path);
+ initramfs_tmp_file = g_file_get_child (tmpdir, "initramfs-ostree.img");
initramfs_tmp_info = g_file_query_info (initramfs_tmp_file, OSTREE_GIO_FAST_QUERYINFO,
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
cancellable, error);
g_print ("Created: %s\n", ot_gfile_get_path_cached (initramfs_file));
- (void) unlink (initramfs_tmp_path);
- (void) rmdir (tmpdir);
+ (void) ot_gfile_unlink (initramfs_tmp_file, NULL, NULL);
+ (void) rmdir (ot_gfile_get_path_cached (tmpdir));
}
ret = TRUE;